home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 1 / Meeting Pearls Vol 1 (1994).iso / amok98-106 / amok103 / identifiedtypes / identifiedtypestest.mod < prev    next >
Text File  |  1993-12-05  |  4KB  |  160 lines

  1. MODULE IdentifiedTypesTest;
  2.  
  3. IMPORT  SYSTEM,
  4.         I:=IdentifiedTypes,
  5.         L:=ComplexLists,
  6.         F:=FileSystem,
  7.         io,
  8.         NoGuru;
  9.  
  10. (* $TypeChk+ $NilChk+ $ReturnChk+ *)
  11.  
  12. TYPE  Name = POINTER TO NameDesc;
  13.       NameExt = POINTER TO NameExtDesc;
  14.       NameDesc = RECORD (L.NodeDesc)
  15.                    name: ARRAY 28 OF CHAR;
  16.                  END;
  17.       NameExtDesc = RECORD (NameDesc)
  18.                       data: POINTER TO ARRAY OF CHAR;
  19.                     END;
  20.  
  21.  
  22. VAR nameList   : L.List;
  23.     dupList    : L.List;
  24.     i          : I.IDENT;
  25.     name       : Name;
  26.     nameext    : NameExt;
  27.  
  28.     cnt: INTEGER;
  29.     z: CHAR;
  30.     f: F.File;
  31.  
  32.  
  33. PROCEDURE CreateNameExt*(): I.IDENT;
  34. VAR ne: NameExt;
  35. BEGIN
  36.   NEW(ne); NEW(ne.data,16);
  37.   RETURN ne;
  38. END CreateNameExt;
  39.  
  40.  
  41. PROCEDURE (n: Name) Write*(VAR f: F.File): BOOLEAN;
  42. BEGIN
  43.   RETURN n.Write^(f) AND
  44.          F.WriteString(f,n.name);
  45. END Write;
  46.  
  47. PROCEDURE (n: Name) Read*(VAR f: F.File): BOOLEAN;
  48. BEGIN
  49.   RETURN n.Read^(f) AND
  50.          F.ReadString(f,n.name);
  51. END Read;
  52.  
  53. PROCEDURE (n: Name) Copy*(x: I.IDENT);
  54. BEGIN
  55.   n.Copy^(x);
  56.   WITH x: Name DO
  57.     x.name:=n.name;
  58.   ELSE
  59.   END;
  60. END Copy;
  61.  
  62.  
  63. PROCEDURE (ne: NameExt) Write*(VAR f: F.File): BOOLEAN;
  64. BEGIN
  65.   RETURN ne.Write^(f) AND
  66.          F.WriteString(f,ne.data^);
  67. END Write;
  68.  
  69. PROCEDURE (ne: NameExt) Read*(VAR f: F.File): BOOLEAN;
  70. BEGIN
  71.   RETURN ne.Read^(f) AND
  72.          F.ReadString(f,ne.data^);
  73. END Read;
  74.  
  75. PROCEDURE (ne: NameExt) Copy*(x: I.IDENT);
  76. BEGIN
  77.   ne.Copy^(x);
  78.   WITH x: NameExt DO
  79.     COPY(ne.data^,x.data^);
  80.   ELSE
  81.   END;
  82. END Copy;
  83.  
  84.  
  85.  
  86. BEGIN
  87.   nameList:=L.Create();
  88.   NEW(name);
  89.   nameext:=CreateNameExt()(NameExt);
  90.  
  91.   IF (I.AddAutoCreateType("NAME",name)=NIL) OR
  92.      (I.AddManualCreateType("NAMEEXT",SYSTEM.TYPEDESC(NameExtDesc),CreateNameExt)=NIL) THEN
  93.     io.WriteString("Typinitialisierungsfehler!\n"); HALT(20);
  94.   END;
  95.  
  96.   name.name:="name";
  97.   nameext.name:="nameext"; nameext.data^:="nameextdata";
  98.  
  99.   FOR cnt:=1 TO 32 DO                         (* 64 Datensätze *)
  100.     nameList.Add(name.Duplicate()(L.Node));
  101.     nameList.Add(nameext.Duplicate()(L.Node));
  102.   END;
  103.  
  104.   IF nameList.Test()#-1 THEN io.WriteString("Fehler in Listenstruktur!(name)"); HALT(20) END;
  105.  
  106.   IF ~F.Open(f,"ram:testfile",TRUE) OR
  107.      ~nameList.Write(f) OR
  108.      ~F.Close(f) THEN
  109.     io.WriteString("Fehler bei Zugriff auf Datei\n");
  110.   END;
  111.  
  112.   IF F.Open(f,"ram:testfile",FALSE) THEN
  113.     i:=I.ReadNext(f);
  114.     IF (i#NIL) AND (i IS L.List) THEN
  115.       dupList:=i(L.List);
  116.     ELSE
  117.       io.WriteString("Fehler in Dateistruktur oder bei Read\n");
  118.     END;
  119.   END;
  120.  
  121.   IF dupList.Test()#-1 THEN io.WriteString("Fehler in Listenstruktur!(dup)"); HALT(20) END;
  122.  
  123.   IF ~F.Open(f,"ram:testfile2",TRUE) OR
  124.      ~dupList.Write(f) OR
  125.      ~F.Close(f) THEN
  126.     io.WriteString("Fehler bei Zugriff auf Datei\n");
  127.   END;
  128.  
  129.   io.WriteString("Dateien ram:testfile und ram:testfile2 sollten identisch sein\n");
  130.  
  131.   FOR cnt:=64 TO 1 BY -3 DO    (* entfernt 1/3 der Datensätze *)
  132.     i:=nameList.Goto(cnt);
  133.     i(L.Node).Remove;
  134.   END;
  135.  
  136.   IF dupList.Test()#-1 THEN io.WriteString("Fehler in Listenstruktur!(dup)"); HALT(20) END;
  137.  
  138.   IF ~F.Open(f,"ram:testfile3",TRUE) OR
  139.      ~nameList.Write(f) OR
  140.      ~F.Close(f) THEN
  141.     io.WriteString("Fehler bei Zugriff auf Datei\n");
  142.   END;
  143.  
  144.   io.WriteString("Datei ram:testfile3 sollte 22 Datensätze weniger enthalten\n");
  145.  
  146.   dupList:=nameList.Duplicate()(L.List);
  147.   IF dupList.Test()#-1 THEN io.WriteString("Fehler in Listenstruktur!(dup)"); HALT(20) END;
  148.  
  149.   IF ~F.Open(f,"ram:testfile4",TRUE) OR
  150.      ~dupList.Write(f) OR
  151.      ~F.Close(f) THEN
  152.     io.WriteString("Fehler bei Zugriff auf Datei\n");
  153.   END;
  154.  
  155.   io.WriteString("Dateien ram:testfile3 und ram:testfile4 sollten identisch sein\n");
  156.  
  157. CLOSE
  158.   io.Read(z);
  159. END IdentifiedTypesTest.
  160.